VSCode编译时提示 undefined reference to “XXX” 问题一列 | 您所在的位置:网站首页 › vscode undefined reference to winmain › VSCode编译时提示 undefined reference to “XXX” 问题一列 |
1、问题现象:
下载cJSON.h/cJSON.c 测试cJSON相关函数,只有cJSON.h、cJSON.c 及配套的test.c 三个文件。 1)在code::blocks 中完全正确运行,能看到正确的结果 2)在vscode中点击右上角的三角编译运行,报如下错误,找不到函数: 事实上三个文件就在同一个目录下: 在cJSON.h中有相关函数的声明,比如: 2、问题分析 仔细查看编译时的执行命令(图一顶部),如下图: 从图中的命令可以发现,编译的时候只包含了目录下的 test.c 文件,并没有包含cJSON.c文件。当我们用命令行编译多个源文件时,应该这样编译 gcc file1.c file2.c -o output,这个命令要指定参与编译的源文件,头文件地址,输出及相关参数。说明编译时参数设置是有问题的 3、解决方法问题是在哪里设置这些需要编译的文件,及参数呢?主要就是在4个jason文件中的下面两个文件中设置,需要注意的地方增加了注释。 1)在tasks.jason 中设置源文件及参数 { // 有关 tasks.json 格式的文档,请参见 // https://go.microsoft.com/fwlink/?LinkId=733558 "version": "2.0.0", "tasks": [ { "type": "shell", "label": "Compile", "command": "D:\\mingw64\\bin\\gcc.exe", "args": [ "-g", "${workspaceFolder}\\cJSON.c","${workspaceFolder}\\test.c", //此处设置编译需要的源文件,有多个,要分别设置 "-I", "--std=c11", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", ], "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false }, // "options": { // "cwd": "D:\\mingw64\\bin" // }, "problemMatcher": [ "$gcc" ], //"group": "build" } ] } 2) 在c_cpp_properties.json 中设置头文件位置 { "configurations": [ { "name": "Win32", "includePath": [ "D:/kkjson/*", //此处是需要的头文件目录位置,有多处则设置多条 "${workspaceFolder}/**" ], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "compilerPath": "D:\\mingw64\\bin\\gcc.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "msvc-x86" } ], "version": 4 }其它两个json文件正常设置即可,与此问题关系不大。 4、验证设置上述两个jason文件,保存后。 1) 再次点击又上角的三角,发现故障依旧,编译命令行的参数并未变化(如上图1,图2) 2)采用 Shift+Ctrl+B 编译,出现如下图(下图中的main.c 是将test.c 改了文件名,无其它变化)。从这里命令行可以看出需要的cJSON.c文件已经参与编译了。并且编译成功。 3,然后F5运行,可得到正确结果。 从1)与 2)3)对比看,右上角的三角Run Coder并未正确读取到配置文件的配置。 |
CopyRight 2018-2019 实验室设备网 版权所有 |